package 文件io;
import java.io.*;
/*
 输入流  抽象父类 OutputStream
 输出流  抽象父类 IutputStream
 
 应用时创建各种的子类 FileOutputStream和FileInputStream
*/
public class 字节输入输出流
{
	public static void main(String[] args){
		out();
		in();
	}
	//输出流
	private static void out(){
		//1确定输出到的目标文件
		File file=new File(FilePath.PATH+"/test.txt");
		//2创建输出流对象out
		try
		{
			OutputStream out=new FileOutputStream(file,true);//此处的参数true使要写入的字节添加到文件中，不写true就是覆盖文件
			//3要写入内容
			String info="你好啊，我是java！\r\n";//\r\n为换行符，
			//System.getProperty("line.separator");//返回换行符，也可以用这个
			
			//4write方法写入 字节数组
			out.write(info.getBytes());
			System.out.println("输出成功");
			out.close();//关闭输出流
		}
		catch (FileNotFoundException e)
		{}
		catch(IOException e)
		{}
		
	}
	//程序输入流
	private static void in(){
		//1确定要读取的文件
		File file=new File(FilePath.PATH+"/test.txt");
		//2创建输入流对象in
		try
		{
			InputStream in=new FileInputStream(file);
			//3创建每次最多 能读的字节数组 大小
			byte[] bytes=new byte[1024];//创建每次读的字节数，如果每次都字节数太小，如1/3等，一个一个字节(或中文不是偶数字节)读取会导致中文乱码
			int len=-1;//表示每次读的字节长度，
			StringBuilder sb=new StringBuilder();//字符串拼接类
			//in.read()返回读取的字节数组长度，不等于-1说明读取成功，如果返回-1说明文件读完
			while((len=in.read(bytes))!=-1){
				//String(byte[],0,len)避免了最后剩的少时，byte数组保留上次后面的值导致读取的数据多来
				sb.append(new String(bytes));
			}
			System.out.println(sb);
			in.close();//关闭输入流
		}
		catch (FileNotFoundException e)
		{}
		catch(IOException e){}
		
	}
}
